home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_200 / 280_01 / compare.c < prev    next >
Text File  |  1989-01-11  |  3KB  |  132 lines

  1. /* [compare.c of JUGPDS Vol.46] */
  2. /*
  3. *****************************************************************
  4. *                                *
  5. *    Written by  Hakuo Katayose (JUG-CP/M No.179)        *
  6. *            49-114 Kawauchi-Sanjuunin-machi        *
  7. *            Sendai, Miyagi 980                          *
  8. *            Phone: 0222-61-3219                *
  9. *                                *
  10. *       Modifird by Toshiya Oota   (JUG-CPM No.10)              *
  11. *                   Sakae ko-po 205                 *
  12. *            5-19-6 Hosoda                *
  13. *            Katusikaku Tokyo 124            *
  14. *                                *
  15. *        for MS-DOS Lattice C V3.1J & 80186/V20/V30    *
  16. *                                *
  17. *    Compiler Option: -ccu -k0(1) -ms -n -v -w        *
  18. *                                *
  19. *    Edited & tested by Y. Monma (JUG-CP/M Disk Editor)    *
  20. *            &  T. Ota   (JUG-CP/M Sub Disk Editor)    *
  21. *                                *
  22. *****************************************************************
  23. */
  24.  
  25. /* Library functions for Software Tools */
  26.  
  27. #include "stdio.h"
  28. #include "dos.h"
  29. #include "ctype.h"
  30. #include "tools.h"
  31. #include "toolfunc.h"
  32.  
  33. /* compare - file comarison */
  34.  
  35. void    main(argc, argv)
  36. int    argc;
  37. char    *argv[];
  38.  
  39. {
  40. char    inbuf1[MAXLINE], inbuf2[MAXLINE];
  41. FILE    *fd1,*fd2;
  42. void    compare();
  43.  
  44.     if (argc < 3)
  45.         error("CMP901 Usage: compare file1 file2\n");
  46.     else if ( (fd1 = fopen((argv[1]),"r") ) == NO)
  47.         error("CMP902 file1 open error!\n");
  48.     else if ( (fd2 = fopen(argv[2],"r") ) == NO)
  49.         error("CMP903 file2 open error!\n");
  50.     else
  51.         compare(inbuf1,inbuf2,fd1,fd2);
  52.     fclose(fd1);
  53.     fclose(fd2);
  54. }
  55.  
  56.  
  57. /* compare - compare two files for equality */
  58.  
  59. void    compare(inbuf1,inbuf2,fd1,fd2)
  60. char    *inbuf1, *inbuf2;
  61. FILE    *fd1,*fd2;
  62.  
  63. {
  64. char *lineptr[MAXLINE], line[MAXLINE];
  65. int  nlines, i, j, k, lineno, len;
  66. int    readlines(),equal();
  67.  
  68.     j = 0;
  69.     lineno = 0;
  70.     if ((nlines = readlines(lineptr,MAXLINE, inbuf2,fd2)) > 0) {
  71.         while ((len = fgetlin(fd1,line, MAXLINE)) > 0) {
  72.             for (i = j; i < nlines; i++)
  73.                 if (equal(line, lineptr[i]) == YES)
  74.                     break;
  75.             if (i == nlines)
  76.                 printf("CMP101 File1 %4d:%s\n", lineno, line);
  77.             else {
  78.                 for (k = j; k < i; k++) {
  79.                     printf("        ");
  80.                     printf("CMP102 File2 %4d:",k);
  81.                     printf("%s\n",lineptr[k]);
  82.                     }
  83.                 j = i + 1;
  84.                 }
  85.             lineno++;
  86.             }
  87.         for (k = j; k < i; k++) {
  88.             printf("        ");
  89.             printf("CMP103 File2 %4d:%s", k, lineptr[k]);
  90.             }
  91.         }
  92. }
  93.  
  94.  
  95. int    readlines(lineptr, maxlines, inbuf,fd)
  96. char    *lineptr[], *inbuf;
  97. FILE    *fd;
  98. int    maxlines;
  99.  
  100. {
  101. int    len, nlines;
  102. char    *p, line[MAXLINE], *malloc();
  103.  
  104.     nlines = 0;
  105.     while ((len = fgetlin(fd,line, MAXLINE)) > 0) {
  106.         if (nlines >= maxlines)
  107.             return(-1);
  108.         else if ((p = malloc(len+1)) == NULL) {
  109.             printf("CMP911 allocation over.  p:%04x\n", p);
  110.             return(-1);
  111.             }
  112.         else {
  113.             strcpy(p, line);
  114.             lineptr[nlines++] = p;
  115.             }
  116.     }
  117.     return(nlines);
  118. }
  119.  
  120. int    equal(s1, s2)
  121. char     *s1, *s2;
  122.  
  123. {
  124.     do {
  125.         while (isspace(*s1)) s1++;
  126.         while (isspace(*s2)) s2++;
  127.         if (*s1 == *s2 && *s1 == EOS)
  128.             return(YES);
  129.         } while (*s1++ == *s2++);
  130.     return(NO);
  131. }
  132.